// Copyright (C) 1953-2022 NUDT
// Verilog module name - opensync_protocol_encapsulate
// Version: V4.1.0.20221205
// Created:
//         by - fenglin 
////////////////////////////////////////////////////////////////////////////
// Description:
//         opensync_protocol_encapsulate
///////////////////////////////////////////////////////////////////////////

`timescale 1ns/1ps

module opensync_protocol_encapsulate#(parameter osm_id = 8'h0,local_module_id = 12'd1)
(
    i_clk                    ,
    i_rst_n                  ,
    
    iv_hcp_mid               ,
    iv_opensync_dst_module_id,
    
    iv_data                  ,
    i_data_wr                ,
    iv_eth_type              ,
    iv_ptp_messagetype       ,
    iv_local_count_rx        ,
    i_diagest_wr             ,    
    
    ov_data                  ,
    o_data_wr
);
// I/O
// clk & rst
input                   i_clk;
input                   i_rst_n;
//input
input       [11:0]      iv_hcp_mid;
input       [11:0]      iv_opensync_dst_module_id;

input       [8:0]       iv_data            ;
input                   i_data_wr          ;
input       [15:0]      iv_eth_type        ;
input       [3:0]       iv_ptp_messagetype ;
input       [23:0]      iv_local_count_rx  ;
input                   i_diagest_wr       ;
//output
output      [8:0]       ov_data;
output                  o_data_wr;

wire                    w_data_fifo_empty_fifo2spe ;
wire                    w_data_fifo_rden_spe2fifo  ;
wire        [8:0]       wv_data_fifo_rdata_fifo2spe;

wire                    w_diagest_fifo_empty_fifo2spe ;
wire                    w_diagest_fifo_rden_spe2fifo  ;
wire        [43:0]      wv_diagest_fifo_rdata_fifo2spe;
//altera ip

syncfifo_showahead_aclr_w9d128 packet_encapsulate_cache_inst(
    .data  (iv_data  ), 
    .wrreq (i_data_wr),
    .rdreq (w_data_fifo_rden_spe2fifo),
    .clock (i_clk),
    .aclr  (!i_rst_n), 
    .q     (wv_data_fifo_rdata_fifo2spe),    
    .usedw (),
    .full  (), 
    .empty (w_data_fifo_empty_fifo2spe) 
);

syncfifo_showahead_aclr_w44d16 diagest_encapsulate_cache_inst(
    .data  ({iv_local_count_rx,iv_ptp_messagetype,iv_eth_type}  ), 
    .wrreq (i_diagest_wr),
    .rdreq (w_diagest_fifo_rden_spe2fifo),
    .clock (i_clk),
    .aclr  (!i_rst_n), 
    .q     (wv_diagest_fifo_rdata_fifo2spe),    
    .usedw (),
    .full  (), 
    .empty (w_diagest_fifo_empty_fifo2spe) 
);

//xilinx ip
/*
syncfifo_showahead_aclr_w9d128 packet_encapsulate_cache_inst(
    .din  (wv_data_htd2fifo  ), 
    .wr_en (w_data_wr_htd2fifo),
    .rd_en (w_data_fifo_rden_spe2fifo),
    .clk   (i_clk),
    .srst  (!i_rst_n), 
    .dout  (wv_data_fifo_rdata_fifo2spe),    
    .data_count (),
    .full  (), 
    .empty (w_data_fifo_empty_fifo2spe) 
);

syncfifo_showahead_aclr_w44d16 diagest_encapsulate_cache_inst(
    .din   (rv_diagest_2  ), 
    .wr_en (r_diagest_wr_2),
    .rd_en (w_diagest_fifo_rden_spe2fifo),
    .clk   (i_clk),
    .srst  (!i_rst_n), 
    .dout  (wv_diagest_fifo_rdata_fifo2spe),    
    .data_count (),
    .full  (), 
    .empty (w_diagest_fifo_empty_fifo2spe) 
);
*/
synchronous_packet_encapsulate #(.osm_id(osm_id),.local_module_id(local_module_id)) synchronous_packet_encapsulate_inst(
    .i_clk                     (i_clk        ),
    .i_rst_n                   (i_rst_n      ), 
    
    .iv_hcp_mid                (iv_hcp_mid               ),
    .iv_opensync_dst_module_id (iv_opensync_dst_module_id),
    
    .i_data_fifo_empty         (w_data_fifo_empty_fifo2spe ),
    .o_data_fifo_rd            (w_data_fifo_rden_spe2fifo  ),
    .iv_data_fifo_rdata        (wv_data_fifo_rdata_fifo2spe),                    

    .i_diagest_fifo_empty      (w_diagest_fifo_empty_fifo2spe ),
    .o_diagest_fifo_rd         (w_diagest_fifo_rden_spe2fifo  ),
    .iv_diagest_fifo_rdata     (wv_diagest_fifo_rdata_fifo2spe),                                                     
                        
    .ov_data                   (ov_data      ),
    .o_data_wr                 (o_data_wr    )
);
endmodule